home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / c / cc02.zip / CTAPE.C < prev    next >
Text File  |  1985-08-28  |  4KB  |  199 lines

  1.  
  2.  
  3. #define  NBLK  0x60
  4.  
  5. int      ma       = NBLK;
  6. int      curtrack = 0;
  7. int      wsize    = 8208;
  8. int      rsize    = 8208;
  9. int      dstat    = 0;
  10. int      istat    = 0;
  11. char     *header  = "Novell Backup Tape";
  12.  
  13. int   marktape() {
  14.       return(mtu(0,0,&rsize,3,ma,0,&dstat,&istat));
  15. }
  16.  
  17. int   skipmarks(num)
  18. int   num;
  19. {
  20.       return(mtu(0,0,&rsize,13,ma,num-1,&dstat,&istat));
  21. }
  22.  
  23. int   backmarks(num)
  24. int   num;
  25. {
  26.       return(mtu(0,0,&rsize,15,ma,num-1,&dstat,&istat));
  27. }
  28.  
  29. int   skiprecs(num)
  30. int   num;
  31. {
  32.       return(mtu(0,0,&rsize,12,ma,num-1,&dstat,&istat));
  33. }
  34.  
  35. int   backrecs(num)
  36. int   num;
  37. {
  38.       return(mtu(0,0,&rsize,14,ma,num-1,&dstat,&istat));
  39. }
  40.  
  41. int   rewindtape() {
  42.       return(mtu(0,0,&rsize,0x40,ma,0,&dstat,&istat));
  43. }
  44.  
  45. int   resettape() {
  46.       int   err;
  47.  
  48.       if (type9())
  49.          ma=0;
  50.       else
  51.          ma=NBLK;
  52.       return (mtu(0,0,&rsize,0x10,ma,0,&dstat,&istat));
  53. /*****
  54. *     curtrack = 0;
  55. *     disp_track(curtrack);
  56. *****/
  57. }
  58.  
  59. int   seltrack(track) {
  60.       if (type9()) {
  61.          ma=0;
  62.          curtrack=3;                   /*always last track if 9 track*/
  63.       }
  64.       else {
  65.          ma = NBLK + track;
  66.          curtrack = track;
  67.       }
  68. /*****
  69. *     disp_track(curtrack);
  70. *****/
  71. }
  72.  
  73. int   readtape(rbuf)
  74. int   rbuf;
  75. {
  76.       return(mtu(rbuf,0,&rsize,1,ma,0,&dstat,&istat));
  77. }
  78.  
  79. int   writetape(wbuf)
  80. int   wbuf;
  81. {
  82.       return(mtu(wbuf,0,&wsize,2,ma,0,&dstat,&istat));
  83. }
  84.  
  85. int   writestat() {
  86.       return(mtu(0,0,&rsize,0xff,ma,0,&dstat,&istat));
  87. }
  88.  
  89. int   searchrec(rbuf,rmask)
  90. int   rbuf, rmask;
  91. {
  92.       return(mtu(rbuf,rmask,&rsize,11,ma,0,&dstat,&istat));
  93. }
  94.  
  95. int   inittape(wbuf)
  96. char  *wbuf;
  97. {
  98.       int   t;
  99.       char  *s1, *s2;
  100.  
  101.       resettape();
  102.       seltrack(0);
  103.       rewindtape();
  104.  
  105.       s1=header;
  106.       s2=wbuf;
  107.  
  108.       while (*s1)
  109.          *s2++ = *s1++;
  110.       *s2=0;
  111.       if (writetape(wbuf))
  112.          return (-1);
  113.       if (marktape())
  114.          return (-1);
  115.       if (marktape())
  116.          return (-1);
  117.       if (!type9())
  118.          for (t=1;t<=3;t++) {
  119.             seltrack(t);
  120.             rewindtape();
  121.             if (marktape())
  122.                return (0xff);
  123.             if (marktape())
  124.                return (0xff);
  125.          }
  126.       seltrack(0);
  127.       rewindtape();
  128.       if (readtape(wbuf))
  129.          return (-1);
  130.       s1=header;
  131.       s2=wbuf;
  132.       while(*s1)
  133.          if (*s1++ != *s2++)
  134.             return (-1);
  135.       return (0);
  136. }
  137.  
  138. int   checkheader(tbuf)
  139. char  *tbuf;
  140. {
  141.       char  *s1, *s2;
  142.  
  143.       resettape();
  144.       seltrack(0);
  145.       rewindtape();
  146.       if (readtape(tbuf))
  147.          return(-1);
  148.       s2=tbuf;
  149.       s1=header;
  150.       while ((*s1) &&  (*s1++ == *s2++))
  151.          ;
  152.       if(*s1)
  153.          return (1);
  154.       return (0);
  155. }
  156.  
  157. int   findEOT(tbuf)
  158. char  *tbuf;
  159. {
  160.       int   lasttrack, EOT, t, ecode;
  161.  
  162.       EOT = 0;
  163.       lasttrack = 0;
  164.       if(ecode=checkheader(tbuf))
  165.          return (ecode);
  166.       for(t=3;(t>=0) && !lasttrack;t--) {
  167.          seltrack(t);
  168.          rewindtape();
  169.          if (skiprecs(1)) {
  170.             if ((istat & 0x3f) == 0x2e) {
  171.                if (!skiprecs(1)) {
  172.                   lasttrack = -1;
  173.                   if (skipmarks(1))
  174.                      return(-1);
  175.                }
  176.             }
  177.             else
  178.                return(-1);
  179.          }
  180.          else {
  181.             lasttrack = -1;
  182.             rewindtape();
  183.          }
  184.       }
  185.       if (!lasttrack)
  186.          return(-1);
  187.       while (!EOT) {
  188.          if (skipmarks(2))
  189.             return(1);
  190.          backmarks(1);
  191.          if (backrecs(1) && ((istat & 0x3f) == 0x2e))
  192.             EOT = -1;
  193.          else {
  194.             skipmarks(1);
  195.          }
  196.       }
  197.       return (0);
  198. }
  199.